package com.briup.corejava.day07;

/**
 * 账户实体类
 * 第一次使用封装特性（隐藏属性）
 * 1、使用private修饰成员变量
 * 2、给私有的成员变量提供公共的访问方法
 */
public class Account {
    private String id;
    private double balance;

    private boolean isAvailable;
    // 该账户是否可用
    // 需求：用户只能看到账户是否可用，无法修改，用户看到的是汉字，不是布尔

    // 构造器，在创建对象的时候会被调用
    // new 类名(); => 调用了空参构造器
    public Account(){
        this("abc",2000.00,true);
    }

    public Account(String id){
        this(id,1000.00,true);
    }
    // 全参构造器 => 对所有的成员变量初始化
    public Account(String id,double balance,boolean isAvailable){
        this.id = id;
        this.balance = balance;
        this.isAvailable = isAvailable;
    }

    // 按照需求提供属性的访问和修改
    public String isAvailable(){
        return isAvailable?"可用":"禁用";
    }

    // 提供访问方法
    public String getId(){
        return id;
    }
    public void setId(String id){
        // 区分成员变量和局部变量
        // 成员变量前面加this
        this.id = id;
    }
    public double getBalance(){
        // 如果没有歧意的，就没有必要加this
        return balance;
    }
    public void setBalance(double balance){
        this.balance = balance;
    }

    // 总结，对于私有属性的访问和修改的方法的一般模版
    /*
        设：有变量 private 数据类型 变量名;
        访问方法：
        public 数据类型 get变量名(){
            return 变量名;
        }
        修改方法：
        public void set变量名(数据类型 新变量名){
            变量名 = 新变量名;
        }
     */

    public void print(){
        // this代表当前对象的引用
        // print()使用的时候必须靠对象调用
        // 哪个对象调用，this就是哪个对象的引用
        System.out.println(this);
    }
}
